{
   // #构造函数#
    //es5的两种写法：
  let regex = new RegExp('xyz', 'i');
  console.log(regex.test('xy123z'),regex.test('<123xyz></123xyz>')); 

  let regex2 = new RegExp(/xyz/i);
  console.log(regex2.test('123xyz'));

  console.log(/^[0-9]*[a-z]*$/.test('123'));  
  //es6中允许第一个参数是一个正则表达式
  let regex3 = new RegExp(/abc/ig, 'i');
  console.log(regex3.flags); //原有正则对象的修饰符是ig，它会被第二个参数i覆盖
  // flags是es6里新增的用来获取修饰符的属性
}
// 字符串对象的4个使用正则表达式的方法： match(),replace(),search(),split()这四个方法全部调用RegExp的实例的方法。

{

   //y修饰符，y和g都是全局匹配，但是g的下一次匹配会自动忽略不匹配的字符，而y不会忽略
  let s = 'bbbbb_bbb_bb_b';
  let a1 = /b+/g;
  let a2 = /b+/y;

  console.log(a1.exec(s),a2.exec(s));
  console.log(a1.exec(s),a2.exec(s));
  console.log(a1.exec(s),a2.exec(s));
}

{
  //u修饰符，匹配nuicode字符，能匹配大于两个字节的字符
  console.log(/^\uD83D/.test('\uD83D\uDC2A')); // true
  console.log(/^\uD83D/u.test('\uD83D\uDC2A')); //false 
  console.log('/\uD83D\uDC2A');

  // 使用u修饰符后，所有量词都会正确识别大于码点大于0xFFFF的Unicode字符。
  console.log('量词',/a{2}/.test('aa')); // true
  console.log('量词',/a{2}/u.test('aa')); // true
  console.log('量词',/𠮷{2}/.test('𠮷𠮷')); // false
  console.log('量词',/𠮷{2}/u.test('𠮷𠮷')); // true
  
  // #正则表达式中，点（.）是一个特殊字符，代表任意的单个字符，但是行终止符（line terminator character）除外
  // U+000A 换行符（\n）
  // U+000D 回车符（\r）
  // U+2028 行分隔符（line separator）
  // U+2029 段分隔符（paragraph separator）
  // 只是一个提案目前还不支持
  // let reg=/test.go/s;
}

{
  //从unicode转换成字符
  console.log(String.fromCharCode('0x20bb7'));
  console.log(String.fromCodePoint('0x20bb7'));
}